home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk1 / files / main.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  6KB  |  289 lines

  1.  
  2. /*
  3.  *  MAIN.C
  4.  *
  5.  *  FILES
  6.  *
  7.  *  A file catalog program by Matthew Dillon.
  8.  *
  9.  *  (c)Copyright 1987 Matthew Dillon, All Rights Reserved.
  10.  *
  11.  */
  12.  
  13. #include "files.h"
  14. #include <xmisc.h>
  15.  
  16. NW Nw = {
  17.     30, 30, 500, 150, -1, -1,
  18.     NEWSIZE|MOUSEBUTTONS|MOUSEMOVE|GADGETDOWN|GADGETUP|MENUPICK|CLOSEWINDOW,
  19.     WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|NOCAREREFRESH|ACTIVATE,
  20.     NULL, NULL, (ubyte *)"V1.1 by Matthew Dillon, Catalog Utility.", NULL,
  21.     NULL, 182, 66, -1, -1, WBENCHSCREEN
  22. };
  23.  
  24. WIN *Win;
  25. RP  *Rp;
  26.  
  27. char FileName[128] = { "s:catalog.db" };
  28.  
  29. main()
  30. {
  31.     char resized = 0;
  32.     char notdone = 1;
  33.     char movebox = 0;
  34.     char moveslider = 0;
  35.     char addactive = 0;
  36.     char noload = 1;
  37.     char dontquit = 0;
  38.  
  39.     char mmove = 0;
  40.     short mmy;
  41.  
  42.     IMESS *im;
  43.  
  44.     openlibs(INTUITION_LIB|GRAPHICS_LIB);
  45.     initslider(&Nw);
  46.     Win = OpenWindow(&Nw);
  47.     failfalse(Win, "Unable to open window");
  48.     Rp = Win->RPort;
  49.  
  50.     addmenus();
  51.     addgadgets();
  52. again:
  53.     for (; notdone || dontquit;) {
  54.     if (dontquit)
  55.         notdone = 1;
  56.     dontquit = 0;
  57.     WaitPort(Win->UserPort);
  58.     while (im = GetMsg(Win->UserPort)) {
  59.         switch(im->Class) {
  60.         case NEWSIZE:
  61.         resized = 1;
  62.         break;
  63.         case MOUSEBUTTONS:
  64.         break;
  65.         case MOUSEMOVE:
  66.         mmove = 1;
  67.         mmy = im->MouseY;
  68.         break;
  69.         case GADGETDOWN:
  70.         {
  71.             char *str = NULL;
  72.             short sel;
  73.             switch(getgadget(im, &sel, &str)) {
  74.             case GAD_SLIDER:
  75.             moveslider = 1;
  76.             movebox = 0;
  77.             sliderhit();
  78.             break;
  79.             case GAD_BIGBOX:
  80.             moveslider = 0;
  81.             movebox = 1;
  82.             bigboxhit(im->MouseY, 0);
  83.             break;
  84.             }
  85.         }
  86.         break;
  87.         case GADGETUP:
  88.         {
  89.             char *str = NULL;
  90.             short sel;
  91.             switch(getgadget(im, &sel, &str)) {
  92.             case GAD_INFO:
  93.             {
  94.                 long fh = Open("raw:10/24/600/150/INFO", 1006);
  95.                 if (fh) {
  96.                 char buf[8];
  97.                 fhprintf(fh, "\n\r\n\rVersion 1.1  Written by Matthew Dillon\n\r");
  98.                 fhprintf(fh, "(c)Copyright 1987 Matthew Dillon, All Rights Reserved.\n\n\r");
  99.                 fhprintf(fh, "    dillon@ucbvax.berkeley.edu     (ARPANET)\n\r");
  100.                 fhprintf(fh, "    ...!ihnp4!ucbvax!dillon        (USENET)\n\r");
  101.                 fhprintf(fh, "Matthew Dillon, 891 Regal Rd. Berkeley, Ca. 94708\n\n\r");
  102.                 fhprintf(fh, "This software is freely redistributable only.  This\n\r");
  103.                 fhprintf(fh, "software is NOT shareware\n\n\r");
  104.                 fhprintf(fh, "Thanks to Peter Da Silva for providing the filerequestor\n\r");
  105.                 fhprintf(fh, "\n\n    Any key to continue\n\r");
  106.                 Read(fh, buf, 1);
  107.                 Close(fh);
  108.                 }
  109.             }
  110.             break;
  111.             case GAD_DEL:
  112.             rem_selected(Highlighted, 0);
  113.             break;
  114.             case GAD_UNDO:
  115.             undo();
  116.             break;
  117.             case GAD_ALL:
  118.             selectall();
  119.             redisplay(0);
  120.             break;
  121.             case GAD_VOLUME:
  122.             if (str[0])
  123.                 add_volume(str);
  124.             activate_vol();
  125.             break;
  126.             case GAD_PATTERN:
  127.             if (str[0]) {
  128.                 title("Wait");
  129.                 select_pattern(str, 0);
  130.             }
  131.             activate_pat();
  132.             break;
  133.             case GAD_COMMENT:
  134.             mod_comment(str);
  135.             break;
  136.             case GAD_SLIDER:
  137.             moveslider = 0;
  138.             sliderhit();
  139.             break;
  140.             case GAD_BIGBOX:
  141.             movebox = 0;
  142.             bigboxhit(im->MouseY, 1);
  143.             break;
  144.             }
  145.         }
  146.         break;
  147.         case MENUPICK:
  148.         switch(getmenu(im)) {
  149.         case MEN_SAVE:
  150.             {
  151.             FILE *fi;
  152.             if (noload && NumEntries == 0) {
  153.                 title("Did I just save you from making a mistake?");
  154.                 break;
  155.             }
  156.             fi = fopen(FileName, "w");
  157.             if (fi) {
  158.                 save_database(fi);
  159.                 if (ferror(fi)) {
  160.                 title("File Error");
  161.                 dontquit = 1;
  162.                 } else {
  163.                 title("Saved ok");
  164.                 Modified = 0;
  165.                 }
  166.                 fclose(fi);
  167.             } else {
  168.                 title("Unable to open file for write");
  169.             }
  170.             }
  171.             break;
  172.         case MEN_SAVEAS:
  173.             {
  174.             FILE *fi;
  175.             if (stdfile("SAVE DATABASE", FileName, "", FileName)) {
  176.                 noload = 0;
  177.                 if (fi = fopen(FileName, "w")) {
  178.                 save_database(fi);
  179.                 if (ferror(fi)) {
  180.                     title("File Error");
  181.                     dontquit = 1;
  182.                 } else {
  183.                     title("Saved ok");
  184.                     Modified = 0;
  185.                 }
  186.                 fclose(fi);
  187.                 } else {
  188.                 title("Unable to open file for write");
  189.                 }
  190.             }
  191.             }
  192.             break;
  193.         case MEN_LOADEF:
  194.             {
  195.             FILE *fi = fopen(FileName, "r");
  196.             long entries = NumEntries;
  197.             if (fi) {
  198.                 noload = 0;
  199.                 load_database(fi);
  200.                 if (!entries)
  201.                 Modified = 0;
  202.                 fclose(fi);
  203.             } else {
  204.                 title("Unable to open file for read");
  205.             }
  206.             }
  207.             break;
  208.         case MEN_LOAD:
  209.             {
  210.             FILE *fi;
  211.             long entries = NumEntries;
  212.             if (stdfile("LOAD DATABASE", FileName, "", FileName)) {
  213.                 noload = 0;
  214.                 if (fi = fopen(FileName, "r")) {
  215.                 load_database(fi);
  216.                 if (!entries)
  217.                     Modified = 0;
  218.                 fclose(fi);
  219.                 } else {
  220.                 title("Unable to open file for read");
  221.                 }
  222.             }
  223.             }
  224.             break;
  225.         case MEN_QUIT:
  226.             notdone = 0;
  227.             break;
  228.         case MEN_KILLPAT:
  229.             resetsort();
  230.             addentry(KILLNAME, "", 0);
  231.             select_pattern(KILLNAME, 0);
  232.             break;
  233.         }
  234.         break;
  235.         case CLOSEWINDOW:
  236.         notdone = 0;
  237.         break;
  238.         }
  239.         ReplyMsg(im);
  240.         if (resized) {
  241.         fixgadgets();
  242.         redisplay(0);
  243.         }
  244.         resized = 0;
  245.     }
  246.     if (mmove) {
  247.         if (moveslider)
  248.         sliderhit();
  249.         if (movebox)
  250.         bigboxhit(mmy, 0);
  251.         mmove = 0;
  252.     }
  253.     }
  254.     if (Modified) {
  255.     title("MODIFICATIONS MADE!  HIT CLOSE-BOX AGAIN TO VERIFY");
  256.     Modified = 0;
  257.     notdone = 1;
  258.     goto again;
  259.     }
  260.     failfalse(NULL, NULL);
  261. }
  262.  
  263. failfalse(val, str)
  264. long val;
  265. char *str;
  266. {
  267.     if (val == NULL) {
  268.     if (str)
  269.         puts(str);
  270.     if (Win) {
  271.         remmenus();
  272.         remgadgets();
  273.         CloseWindow(Win);
  274.         Win = NULL;
  275.     }
  276.     closelibs(-1);
  277.     exit((str)? 1 : 0);
  278.     }
  279. }
  280.  
  281. failtrue(val, str)
  282. long val;
  283. char *str;
  284. {
  285.     if (val)
  286.     failfalse(NULL, str);
  287. }
  288.  
  289.